package cn.lkk.samples.lang.inheritance.basic;

/**
 * 演示了 base 和 this 关键字的使用方式
 * 1. 如何调用父类的构造函数
 * 2. 如果调用父类的方法
 * 3. 父类构造函数先与子类构造函数调用
 * 4. this 关键字的两个作用
 */
public class Manager extends Employee {

    private double bonus;

    public Manager(String name, double salary, int year, int month, int day) {
        // 1. 使用 super 关键字调用父类的构造函数
        super(name, salary, year, month, day);
        bonus = 0;
    }

    public Manager() {
        // 4. 使用 this 关键字调用本类的构造函数
        // 任何构造函数都必定会调用构造函数，方式包括
        // 自己显示调用：super 必须在第一行
        // 通过调用本类其他构造函数调用：this 必须在第一行
        // 默认调用：父类必须包含默认构造函数
        this("", 0, 1970, 1, 1);
    }

    @Override
    public double getSalary() {
        // 2. 使用 super 关键字调用父类方法
        return super.getSalary() + bonus;
    }

    public void setBonus(double bonus) {
        // 3. this 关键字代表隐式参数
        this.bonus = bonus;
    }
}
